package com.auth.manage.trade.domain.entity;

import com.auth.manage.datasource.domain.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 交易订单实体类
 *
 * @author YourName
 * @date 2023-10-27
 */
@Data
@TableName("trade_order")
public class TradeOrder extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 订单号
     */
    private String orderNum;

    /**
     * 买家ID
     */
    private Long buyerId;

    /**
     * 逆序的买家ID (todo: )
     */
    private String reverseBuyerId;

    /**
     * 卖家ID (todo: 平台赠送如何设置)
     */
    private Long sellerId;

    /**
     * 幂等号
     */
    private String identifier;

    /**
     * 商品ID，一个商品有多个订单
     */
    private String goodsId;

    /**
     * 商品图片地址
     */
    private String goodsPicUrl;

    /**
     * 商品名称
     */
    private String goodsName;

    /**
     * 商品单价
     */
    private BigDecimal itemPrice;

    /**
     * 商品数量
     */
    private Integer itemCount;

    /**
     * 订单金额
     */
    private BigDecimal orderAmount;

    /**
     * 订单状态 (建议使用枚举类型)
     */
    private String orderState;

    /**
     * 已支付金额
     */
    private BigDecimal paidAmount;

    /**
     * 支付成功时间，对于支付宝微信支付成功的时间
     */
    private LocalDateTime paySucceedTime;

    /**
     * 订单确认时间，订单确认时间 = 支付回调处理延迟 + 支付成功时间
     */
    private LocalDateTime orderConfirmedTime;

    /**
     * 订单完成时间
     */
    private LocalDateTime orderFinishedTime;

    /**
     * 关单时间
     */
    private LocalDateTime orderClosedTime;

    /**
     * 支付渠道，微信、支付宝 (建议使用枚举类型)
     */
    private String payChannel;

    /**
     * 支付流水号：todo 支付宝/微信回调时，他们自己生成的id
     */
    private String payStreamId;

    /**
     * 关闭类型，超时关闭、手动关闭等 (建议使用枚举类型)
     */
    private String closeType;

    /**
     * 商品快照版本号
     */
    private Integer snapshotVersion;

    /**
     * 创建人
     */
    private Long createdBy;

    /**
     * 更新人
     */
    private Long updatedBy;

}